// 引入stream模块
const { Readable } = require('stream');

// 1. 自定义MyReadable构造函数，继承自Readable
class MyReadable extends Readable {
  constructor(options) {
    // 调用父类构造函数
    super(options);
    // 初始化当前字符编码（a的ASCII码为97）
    this.currentCharCode = 97;
  }

  // 2. 实现_read方法（可读流核心方法，由流内部调用）
  _read() {
    // 生成当前字符
    const char = String.fromCharCode(this.currentCharCode);
    // 将字符转换为缓冲区（流默认处理Buffer类型）
    const buffer = Buffer.from(char, 'utf8');

    // 推送数据到流的缓冲区（null表示数据结束）
    this.push(this.currentCharCode < 123 ? buffer : null);

    // 递增字符编码，直到z（ASCII码122）
    this.currentCharCode++;
  }
}

// 3. 创建自定义可读流实例
const myReadableStream = new MyReadable();

// 4. 将流数据输出到控制台（process.stdout是可写流）
myReadableStream.pipe(process.stdout);

// 监听流结束事件
myReadableStream.on('end', () => {
  console.log('\n已完成a-z字符的输出');
});